package modelo.geografia;

import java.util.List;
import java.util.ArrayList;
import java.util.Collections;

import modelo.lugares.LugarDeViajes;
import modelo.lugares.LugarEconomico;
import modelo.lugares.LugarCultural;
import modelo.lugares.LugarPreguntable;
import modelo.pista.Pista;


public class Ciudad {
	
	private String nombre;
	private PosicionGeografica posicion;
	private LugarPreguntable lugarCultural;
	private LugarPreguntable lugarDeViajes;
	private LugarPreguntable lugarEconomico;
	private boolean elLadronSeEscondeEnEstaCiudad;
	private Ciudad proximaCiudadALaQueFueElLadron;

	public Ciudad(String nombreCiudad, String latitud, String longitud) {
		nombre = nombreCiudad;
		posicion = new PosicionGeografica(Double.parseDouble(latitud), Double.parseDouble(longitud));
		lugarCultural = new LugarCultural(this);  
		lugarDeViajes = new LugarDeViajes(this);
		lugarEconomico = new LugarEconomico(this);
		elLadronSeEscondeEnEstaCiudad = false;
		proximaCiudadALaQueFueElLadron = null;
	}
	public LugarPreguntable getLugarCultural() {		
		return lugarCultural;
	}
	public LugarPreguntable getLugarDeViajes() {
		return lugarDeViajes;
	}
	public LugarPreguntable getLugarEconomico() {
		return lugarEconomico;
	}
	public String getNombre(){
		return nombre;
	}
	public PosicionGeografica getPosicion(){
		return posicion;
	}
	public void verAlLadronYendoseA(Ciudad proximaCiudad){
		proximaCiudadALaQueFueElLadron = proximaCiudad;
		this.elLadronSeEscondeEnEstaCiudad = false;	
	}
	public void acordarseAlgoDelLadron(Pista pistaSobreElLadron){
		List<LugarPreguntable> edificios = new ArrayList<LugarPreguntable>();
		edificios.add(lugarCultural);
		edificios.add(lugarEconomico);
		edificios.add(lugarDeViajes);
		Collections.shuffle(edificios);
		edificios.get(0).setPistaSobreElLadron(pistaSobreElLadron);//coloca la pista en uno de los 3 lugares, al azar.		
	}
	public Ciudad getProximaCiudadALaQueFueElLadron() {
		return proximaCiudadALaQueFueElLadron;
	}
	public void elLadronSeEscondeEnEstaCiudad() {
		elLadronSeEscondeEnEstaCiudad = true;
	}
	public boolean preguntarSiElLadronSeEscondeEnEstaCiudad(){
		return elLadronSeEscondeEnEstaCiudad;
	}
	public LugarPreguntable getLugarPreguntable(String nombreDelLugar) {
		switch (nombreDelLugar.toUpperCase()) {
		case "LUGARCULTURAL":
			return lugarCultural;
		case "LUGARECONOMICO":
			return lugarEconomico;
		case "LUGARDEVIAJES":
			return lugarDeViajes;
		default:
			System.out.println("error");
			break;
		}
		return null;
	}
}
